<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:36:18 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8" /><!-- /Added by HTTrack -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="Generator" content="iWeb 3.0.4"/>
<meta name="iWeb-Build" content="local-build-20170103"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta name="viewport" content="width=770"/>
<title>wolfSSL - Docs | wolfSSL Manual - Chapter 17.13 (API Reference, TLS Extensions)</title>
<link rel="stylesheet" type="text/css" media="screen,print" href="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions.css"/>
<!--[if lt IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensionsIE.css'/><![endif]-->
<!--[if gte IE 8]><link rel='stylesheet' type='text/css' media='screen,print' href='Media/IE8.css'/><![endif]-->
<script type="text/javascript" src="Scripts/iWebSite.js"></script>
<script type="text/javascript" src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions.js"></script>
<meta name="description" content="wolfSSL (formerly CyaSSL) API reference functions related to supported TLS Extensions."/><meta name="keywords" content="embedded ssl, ssl library, lightweight ssl, open source ssl, open source web server, tls 1.2, embedded security, small openssl, smart grid, connected home, ecc, suite b, fips, encryption security software, ssl inspection"/><meta name="robots" content="follow,index"/> <script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','../../www.google-analytics.com/analytics.js','ga');ga('create','UA-64826966-1','auto');ga('send','pageview');</script>
 
<script>//<![CDATA[
window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(c){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("../../assets.zendesk.com/embeddable_framework/main.js","wolfssl.zendesk.com");
//]]></script>
  </head>
<body style="background: rgb(255, 255, 255); margin: 0pt; " onload="onPageLoad();">
<div style="text-align: center; ">
<div style="margin-bottom: 20px; margin-left: auto; margin-right: auto; margin-top: 20px; overflow: hidden; position: relative; word-wrap: break-word;  background: rgb(255, 255, 255); text-align: left; width: 770px; " id="body_content">
<div style="float: left; margin-left: 0px; position: relative; width: 770px; z-index: 0; " id="nav_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div style="clear: both; height: 0px; line-height: 0px; " class="spacer"> </div>
</div>
<div style="float: left; height: 0px; line-height: 0px; margin-left: 0px; position: relative; width: 770px; z-index: 10; " id="header_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
</div>
<div style="margin-left: 0px; position: relative; width: 770px; z-index: 5; " id="body_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div id="id1" style="height: 38px; left: 375px; position: absolute; top: 157px; width: 361px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_361_38" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style">wolfSSL Manual</p>
</div>
</div>
</div>
<div id="id2" style="height: 24px; left: 193px; position: absolute; top: 122px; width: 268px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_268_24" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_1"><a class="class1" title="Docs.html" href="Docs.html">Docs</a> <span class="style">-&gt;</span> <span class="style_1">wolfSSL Manual</span></p>
</div>
</div>
</div>
<div style="height: 1px; width: 698px;  height: 1px; left: 37px; position: absolute; top: 220px; width: 698px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 698px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_1.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 698px; "/>
</div>
</div>
<div style="height: 37px; width: 545px;  height: 37px; left: 191px; position: absolute; top: 80px; width: 545px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 545px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_2.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 545px; "/>
</div>
</div>
<div id="id3" style="height: 25px; left: 200px; position: absolute; top: 84px; width: 43px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_43_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_2"><a class="class2" title="Home.html" href="Home.html">Home</a></p>
</div>
</div>
</div>
<div id="id4" style="height: 25px; left: 365px; position: absolute; top: 84px; width: 72px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_72_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class3" title="https://wolfssl.com/wolfSSL/download/downloadForm.php" href="https://wolfssl.com/wolfSSL/download/downloadForm.php">Download</a></p>
</div>
</div>
</div>
<div id="id5" style="height: 25px; left: 439px; position: absolute; top: 84px; width: 59px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_59_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class4" title="License.html" href="License.html">License</a></p>
</div>
</div>
</div>
<div id="id6" style="height: 25px; left: 499px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class5" title="Blog/Blog.html" href="Blog/Blog.html">Blog</a></p>
</div>
</div>
</div>
<div id="id7" style="height: 25px; left: 589px; position: absolute; top: 84px; width: 80px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_80_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class6" title="Community.html" href="Community.html">Community</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 245px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_3.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 296px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_4.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 363px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_5.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 438px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_6.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 498px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_7.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 589px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_8.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id8" style="height: 25px; left: 671px; position: absolute; top: 84px; width: 61px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_61_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class7" title="Contact.html" href="Contact.html">Contact</a></p>
</div>
</div>
</div>
<div id="id9" style="height: 25px; left: 249px; position: absolute; top: 84px; width: 44px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_44_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_2"><a class="class8" title="About.html" href="About.html">About</a></p>
</div>
</div>
</div>
<div style="height: 36px; width: 1px;  height: 36px; left: 670px; position: absolute; top: 81px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_9.png" alt="" style="height: 36px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id10" style="height: 25px; left: 298px; position: absolute; top: 84px; width: 63px; z-index: 1; " class="style_SkipStroke_1 shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_63_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_3"><a class="class9" title="Products.html" href="Products.html">Products</a></p>
</div>
</div>
</div>
<div id="id11" style="height: 25px; left: 549px; position: absolute; top: 84px; width: 41px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_41_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_2"><a class="class10" title="Docs.html" href="Docs.html">Docs</a></p>
</div>
</div>
</div>
<div style="height: 37px; width: 1px;  height: 37px; left: 545px; position: absolute; top: 80px; width: 0px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 0px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_10.png" alt="" style="height: 37px; left: 0px; position: absolute; top: 0px; width: 1px; "/>
</div>
</div>
<div id="id12" style="height: 27px; left: 634px; position: absolute; top: 224px; width: 102px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_102_27" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_4"><a class="class11" title="Docs-wolfssl-manual-A-ssl-tls-overview.html" href="Docs-wolfssl-manual-A-ssl-tls-overview.html">Next Chapter</a></p>
</div>
</div>
</div>
<div id="id13" style="height: 25px; left: 35px; position: absolute; top: 224px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_5"><a class="class12" title="Docs-wolfssl-manual-17-11-wolfssl-api-certificate-manager.html" href="Docs-wolfssl-manual-17-11-wolfssl-api-certificate-manager.html">Previous Chapter</a></p>
</div>
</div>
</div>
<div id="id14" style="height: 27px; left: 59px; position: absolute; top: 190px; width: 196px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_196_27" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_6"><a class="class13" title="https://www.wolfssl.com/documentation/wolfSSL-Manual.pdf" href="https://www.wolfssl.com/documentation/wolfSSL-Manual.pdf">Download wolfSSL Manual (PDF)</a></p>
</div>
</div>
</div>
<div style="height: 22px; width: 22px;  height: 22px; left: 33px; position: absolute; top: 191px; width: 22px; z-index: 1; " class="tinyText style_SkipStroke_2">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/PDF.png" alt="" style="border: none; height: 22px; width: 22px; "/>
</div>
<div id="id15" style="height: 25px; left: 323px; position: absolute; top: 224px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_7"><a title="Docs-wolfssl-manual-toc.html" href="Docs-wolfssl-manual-toc.html">Table of Contents</a></p>
</div>
</div>
</div>
<div id="id16" style="height: 10399px; left: 35px; position: absolute; top: 281px; width: 701px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_701_10399" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-top: 0pt; " class="paragraph_style_8">Chapter 17: wolfSSL API Reference<br/></p>
<p class="paragraph_style_8"><br/></p>
<p class="paragraph_style_9">17.13  TLS Extensions<br/></p>
<p class="paragraph_style_9"><br/></p>
<p class="paragraph_style_10">The functions in this section are specific to supported TLS extensions.<span class="style_2"><br/></span></p>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_11"><br/></p>
<div class="paragraph paragraph_style_11"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_11.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_11"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_UseSNI<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_CTX_UseSNI(CYASSL_CTX* ctx, unsigned char type, const void* data, unsigned short size);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function enables the use of Server Name Indication for SSL objects created from the SSL context passed in the 'ctx' parameter. It means that the SNI extension will be sent on ClientHello by CyaSSL clients and CyaSSL servers will respond ClientHello + SNI with either ServerHello + blank SNI or alert fatal in case of SNI mismatch.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ctx is NULL<br/></p>
<p class="paragraph_style_10">    * data is NULL<br/></p>
<p class="paragraph_style_10">    * type is a unknown value. (see below)<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to a SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">type</span> - indicates witch type of server name is been passed in data. The known types are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_HOST_NAME = 0<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">data</span> - pointer to the server name data.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">size</span> - size of the server name data.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_CTX_UseSNI(ctx, CYASSL_SNI_HOST_NAME, &quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;, strlen(&quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;));<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // sni usage failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_new<br/></p>
<p class="paragraph_style_10">CyaSSL_UseSNI<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_12.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_UseSNI<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_UseSNI(CYASSL* ssl, unsigned char type, const void* data, unsigned short size);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function enables the use of Server Name Indication in the SSL object passed in the 'ssl' parameter. It means that the SNI extension will be sent on ClientHello by CyaSSL client and CyaSSL server will respond ClientHello + SNI with either ServerHello + blank SNI or alert fatal in case of SNI mismatch.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ssl is NULL<br/></p>
<p class="paragraph_style_10">    * data is NULL<br/></p>
<p class="paragraph_style_10">    * type is a unknown value. (see below)<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to a SSL object, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">type</span> - indicates witch type of server name is been passed in data. The known types are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_HOST_NAME = 0<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">data</span> - pointer to the server name data.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">size</span> - size of the server name data.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ssl = CyaSSL_new(ctx);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ssl == NULL) {<br/></p>
<p class="paragraph_style_14">    // ssl creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_UseSNI(ssl, CYASSL_SNI_HOST_NAME, &quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;, strlen(&quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;));<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // sni usage failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_new<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_UseSNI<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_13.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_SNI_SetOptions<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_CTX_SNI_SetOptions(CYASSL_CTX* ctx, unsigned char type, unsigned char options);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the server side to configure the behavior of the SSL sessions using Server Name Indication for SSL objects created from the SSL context passed in the 'ctx' parameter. The options are explained below.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">This function does not have a return value.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to a SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">type</span> - indicates which type of server name is been passed in data. The known types are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_HOST_NAME = 0<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">options</span> - a bitwise semaphore with the chosen options. The available options are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_CONTINUE_ON_MISMATCH = 0x01,<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_ANSWER_ON_MISMATCH   = 0x02<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10">    <br/></p>
<p class="paragraph_style_10">Normally the server will abort the handshake by sending a fatal-level unrecognized_name(112) alert if the host name provided by the client mismatch with the servers.<br/></p>
<p class="paragraph_style_10">    <br/></p>
<p class="paragraph_style_10"><span class="style_3">CYASSL_SNI_CONTINUE_ON_MISMATCH</span> - With this option set, the server will not send a SNI response instead of aborting the session.<br/></p>
<p class="paragraph_style_10">    <br/></p>
<p class="paragraph_style_10"><span class="style_3">CYASSL_SNI_ANSWER_ON_MISMATCH</span> - With this option set, the server will send a SNI response as if the host names match instead of aborting the session.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_CTX_UseSNI(ctx, 0, &quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;, strlen(&quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;));<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // sni usage failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_15">CyaSSL_CTX_SNI_SetOptions(ctx, CYASSL_SNI_HOST_NAME, CYASSL_SNI_CONTINUE_ON_MISMATCH);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_new<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_UseSNI<br/></p>
<p class="paragraph_style_10">CyaSSL_SNI_SetOptions<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_14.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_SNI_SetOptions<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">void CyaSSL_SNI_SetOptions(CYASSL_CTX* ctx, unsigned char type, unsigned char options);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the server side to configure the behavior of the SSL session using Server Name Indication in the SSL object passed in the 'ssl' parameter. The options are explained below.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">This function does not have a return value.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to a SSL object, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">type</span> - indicates which type of server name is been passed in data. The known types are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_HOST_NAME = 0<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">options</span> - a bitwise semaphore with the chosen options. The available options are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_CONTINUE_ON_MISMATCH = 0x01,<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_ANSWER_ON_MISMATCH   = 0x02<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10">    <br/></p>
<p class="paragraph_style_10">Normally the server will abort the handshake by sending a fatal-level unrecognized_name(112) alert if the host name provided by the client mismatch with the servers.<br/></p>
<p class="paragraph_style_10">    <br/></p>
<p class="paragraph_style_10"><span class="style_3">CYASSL_SNI_CONTINUE_ON_MISMATCH</span> - With this option set, the server will not send a SNI response instead of aborting the session.<br/></p>
<p class="paragraph_style_10">    <br/></p>
<p class="paragraph_style_10"><span class="style_3">CYASSL_SNI_ANSWER_ON_MISMATCH</span> - With this option set, the server will send a SNI response as if the host names match instead of aborting the session.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ssl = CyaSSL_new(ctx);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ssl == NULL) {<br/></p>
<p class="paragraph_style_14">    // ssl creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_UseSNI(ssl, 0, &quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;, strlen(&quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;));<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // sni usage failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_15">CyaSSL_SNI_SetOptions(ssl, CYASSL_SNI_HOST_NAME, CYASSL_SNI_CONTINUE_ON_MISMATCH);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_new<br/></p>
<p class="paragraph_style_10">CyaSSL_UseSNI<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_SNI_SetOptions<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_15.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_SNI_GetRequest<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">unsigned short CyaSSL_SNI_GetRequest(CYASSL *ssl, unsigned char type, void** data);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the server side to retrieve the Server Name Indication provided by the client in a SSL session.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">The size of the provided SNI data.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to a SSL object, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">type</span> - indicates which type of server name is been retrieved in data. The known types are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_HOST_NAME = 0<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">data</span> - pointer to the data provided by the client.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ssl = CyaSSL_new(ctx);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ssl == NULL) {<br/></p>
<p class="paragraph_style_14">    // ssl creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_UseSNI(ssl, 0, &quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;, strlen(&quot;<a title="http://www.yassl.com" href="http://www.yassl.com/">www.yassl.com</a>&quot;));<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // sni usage failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (CyaSSL_accept(ssl) == SSL_SUCCESS) {<br/></p>
<p class="paragraph_style_14">    void *data = NULL;<br/></p>
<p class="paragraph_style_14">    unsigned short size = CyaSSL_SNI_GetRequest(ssl, 0, &amp;data);<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_UseSNI<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_UseSNI<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_16.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_SNI_GetFromBuffer<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">CYASSL_API int CyaSSL_SNI_GetFromBuffer(const unsigned char* buffer, unsigned int bufferSz, unsigned char type, unsigned char* sni, unsigned int* inOutSz);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the server side to retrieve the Server Name Indication provided by the client from the Client Hello message sent by the client to start a session. It does not requires context or session setup to retrieve the SNI.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>;<br/></p>
<p class="paragraph_style_10">If there is no SNI extension in the client hello, the call will return <span class="style_3">0</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of this cases:<br/></p>
<p class="paragraph_style_10">    * buffer is NULL<br/></p>
<p class="paragraph_style_10">    * bufferSz &lt;= 0<br/></p>
<p class="paragraph_style_10">    * sni is NULL<br/></p>
<p class="paragraph_style_10">    * inOutSz is NULL or &lt;= 0<br/></p>
<p class="paragraph_style_16"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BUFFER_ERROR</span> is the error returned when there is a malformed Client Hello message.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">INCOMPLETE_DATA</span> is the error returned when there is not enough data to complete the extraction.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">buffer</span> - pointer to the data provided by the client (Client Hello).<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">bufferSz</span> - size of the Client Hello message.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">type</span> - indicates which type of server name is been retrieved from the buffer. The known types are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_SNI_HOST_NAME = 0<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">sni</span> - pointer to where the output is going to be stored.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">inOutSz</span> - pointer to the output size, this value will be updated to MIN(&quot;SNI's length&quot;, inOutSz).<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">unsigned char buffer[1024] = {0};<br/></p>
<p class="paragraph_style_14">unsigned char result[32]   = {0};<br/></p>
<p class="paragraph_style_14">int           length       = 32;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">// read Client Hello to buffer...<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_SNI_GetFromBuffer(buffer, sizeof(buffer), 0, result, &amp;length));<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != SSL_SUCCESS) {<br/></p>
<p class="paragraph_style_14">    // sni retrieve failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_UseSNI<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_UseSNI<br/></p>
<p class="paragraph_style_10">CyaSSL_SNI_GetRequest<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_17.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_UseMaxFragment<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_CTX_UseMaxFragment(CYASSL_CTX* ctx, unsigned char mfl);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the client side to enable the use of Maximum Fragment Length for SSL objects created from the SSL context passed in the 'ctx' parameter. It means that the Maximum Fragment Length extension will be sent on ClientHello by CyaSSL clients.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ctx is NULL<br/></p>
<p class="paragraph_style_10">    * mfl is out of range.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to a SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">mfl</span> - indicates witch is the Maximum Fragment Length requested for the session. The available options are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_9  = 1, /*  512 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_10 = 2, /* 1024 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_11 = 3, /* 2048 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_12 = 4, /* 4096 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_13 = 5  /* 8192 bytes *//* CyaSSL ONLY!!! */<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_CTX_UseMaxFragment(ctx, CYASSL_MFL_2_11);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // max fragment usage failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_new<br/></p>
<p class="paragraph_style_10">CyaSSL_UseMaxFragment<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_18.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12">CyaSSL_UseMaxFragment<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_UseMaxFragment(CYASSL* ssl, unsigned char mfl);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the client side to enable the use of Maximum Fragment Length in the SSL object passed in the 'ssl' parameter. It means that the Maximum Fragment Length extension will be sent on ClientHello by CyaSSL clients.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ssl is NULL<br/></p>
<p class="paragraph_style_10">    * mfl is out of range.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to a SSL object, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">mfl</span> - indicates witch is the Maximum Fragment Length requested for the session. The available options are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_9  = 1, /*  512 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_10 = 2, /* 1024 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_11 = 3, /* 2048 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_12 = 4, /* 4096 bytes */<br/></p>
<p class="paragraph_style_10">        CYASSL_MFL_2_13 = 5  /* 8192 bytes *//* CyaSSL ONLY!!! */<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ssl = CyaSSL_new(ctx);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ssl == NULL) {<br/></p>
<p class="paragraph_style_14">    // ssl creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_UseMaxFragment(ssl, CYASSL_MFL_2_11);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // max fragment usage failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_new<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_UseMaxFragment<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_19.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_UseTruncatedHMAC<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_CTX_UseTruncatedHMAC(CYASSL_CTX* ctx);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the client side to enable the use of Truncated HMAC for SSL objects created from the SSL context passed in the 'ctx' parameter. It means that the Truncated HMAC extension will be sent on ClientHello by CyaSSL clients.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ctx is NULL<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to a SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_CTX_UseTruncatedHMAC(ctx);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // truncated HMAC usage failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_new<br/></p>
<p class="paragraph_style_10">CyaSSL_UseMaxFragment<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_20.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_UseTruncatedHMAC<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_UseTruncatedHMAC(CYASSL* ssl);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the client side to enable the use of Truncated HMAC in the SSL object passed in the 'ssl' parameter. It means that the Truncated HMAC extension will be sent on ClientHello by CyaSSL clients.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ssl is NULL<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to a SSL object, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ssl = CyaSSL_new(ctx);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ssl == NULL) {<br/></p>
<p class="paragraph_style_14">    // ssl creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_UseTruncatedHMAC(ssl);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // truncated HMAC usage failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_new<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_UseMaxFragment<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_21.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_CTX_UseSupportedCurve<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_CTX_UseSupportedCurve(CYASSL_CTX* ctx, unsigned short name);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the client side to enable the use of Supported Elliptic Curves Extension for SSL objects created from the SSL context passed in the 'ctx' parameter. It means that the supported curves enabled will be sent on ClientHello by CyaSSL clients. This function can be called more than one time to enable multiple curves.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ctx is NULL<br/></p>
<p class="paragraph_style_10">    * name is a unknown value. (see below)<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ctx</span> - pointer to a SSL context, created with CyaSSL_CTX_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">name</span> - indicates which curve will be supported for the session. The available options are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP160R1 = 0x10,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP192R1 = 0x13,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP224R1 = 0x15,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP256R1 = 0x17,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP384R1 = 0x18,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP521R1 = 0x19<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_CTX_UseSupportedCurve(ctx, CYASSL_ECC_SECP256R1);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // Elliptic Curve Extension usage failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_new<br/></p>
<p class="paragraph_style_10">CyaSSL_UseSupportedCurve<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_22.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_12"><br/></p>
<p class="paragraph_style_12">CyaSSL_UseSupportedCurve<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Synopsis:<br/></p>
<p class="paragraph_style_10">#include &lt;cyassl/ssl.h&gt;<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10">int CyaSSL_UseSupportedCurve(CYASSL* ssl, unsigned short name);<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Description:<br/></p>
<p class="paragraph_style_10">This function is called on the client side to enable the use of Supported Elliptic Curves Extension in the SSL object passed in the 'ssl' parameter. It means that the supported curves enabled will be sent on ClientHello by CyaSSL clients. This function can be called more than one time to enable multiple curves.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Return Values:<br/></p>
<p class="paragraph_style_10">If successful the call will return <span class="style_3">SSL_SUCCESS</span>.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">BAD_FUNC_ARG</span> is the error that will be returned in one of these cases:<br/></p>
<p class="paragraph_style_10">    * ssl is NULL<br/></p>
<p class="paragraph_style_10">    * name is a unknown value. (see below)<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">MEMORY_E</span> is the error returned when there is not enough memory.<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Parameters:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">ssl</span> - pointer to a SSL object, created with CyaSSL_new().<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><span class="style_3">name</span> - indicates witch curve will be supported for the session. The available options are:<br/></p>
<p class="paragraph_style_10">    enum {<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP160R1 = 0x10,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP192R1 = 0x13,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP224R1 = 0x15,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP256R1 = 0x17,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP384R1 = 0x18,<br/></p>
<p class="paragraph_style_10">            CYASSL_ECC_SECP521R1 = 0x19<br/></p>
<p class="paragraph_style_10">    };<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">Example:<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_14">int ret = 0;<br/></p>
<p class="paragraph_style_14">CYASSL_CTX* ctx = 0;<br/></p>
<p class="paragraph_style_14">CYASSL* ssl = 0;<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ctx = CyaSSL_CTX_new(method);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ctx == NULL) {<br/></p>
<p class="paragraph_style_14">    // context creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ssl = CyaSSL_new(ctx);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ssl == NULL) {<br/></p>
<p class="paragraph_style_14">    // ssl creation failed<br/></p>
<p class="paragraph_style_14">}<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">ret = CyaSSL_UseSupportedCurve(ssl, CYASSL_ECC_SECP256R1);<br/></p>
<p class="paragraph_style_14"><br/></p>
<p class="paragraph_style_14">if (ret != 0) {<br/></p>
<p class="paragraph_style_14">    // Elliptic Curve Extension usage failed<br/></p>
<p class="paragraph_style_15">}<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_13">See Also:<br/></p>
<p class="paragraph_style_10">CyaSSL_new<br/></p>
<p class="paragraph_style_10">CyaSSL_CTX_UseSupportedCurve<br/></p>
<p class="paragraph_style_10"><br/></p>
<p class="paragraph_style_10"><br/></p>
<div class="paragraph paragraph_style_10"><div style="height: 1px; width: 693px;  height: 1px; left: 0px; position: relative; top: 1px; width: 693px; " class="tinyText inline-block"><div style="position: relative; width: 693px; "><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_23.jpg" alt="" style="height: 1px; left: 0px; position: absolute; top: 0px; width: 693px; "/></div></div><br/></div>
<p class="paragraph_style_10"><br/></p>
</div>
<div style="clear: both; height: 0px; line-height: 0px; " class="tinyText"> </div>
</div>
</div>
<div style="height: 16px; width: 20px;  height: 16px; left: 706px; position: absolute; top: 51px; width: 20px; z-index: 1; " class="tinyText">
<div style="position: relative; width: 20px; ">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/shapeimage_24.png" alt="" style="height: 16px; left: 0px; position: absolute; top: 0px; width: 20px; "/>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 707px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/United%20Kingdom(Great%20Britain).png" alt="" style="border: none; height: 19px; width: 19px; "/>
</div>
<div id="id17" style="height: 23px; left: 328px; position: absolute; top: 48px; width: 258px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_258_23" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_17">Questions? +1 (425) 245-8247</p>
</div>
</div>
</div>
<div style="height: 19px; width: 19px;  height: 19px; left: 685px; position: absolute; top: 25px; width: 19px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="http://www.wolfssl.jp/" title="http://www.wolfssl.jp"><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/japan.png" alt="" style="border: none; height: 19px; width: 19px; "/></a>
</div>
<div id="id18" style="height: 28px; left: 593px; position: absolute; top: 44px; width: 119px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_119_28" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_18"><a class="class14" title="https://www.wolfssl.com/forums" href="https://www.wolfssl.com/forums">Support <span class="style_4">Forums</span></a></p>
</div>
</div>
</div>
<div style="height: 121px; width: 155px;  height: 121px; left: 32px; position: absolute; top: 5px; width: 155px; z-index: 1; " class="tinyText style_SkipStroke_2">
<a href="Home.html" title="Home.html"><img src="Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions_files/wolfssl_logo.png" alt="" style="border: none; height: 121px; width: 156px; "/></a>
</div>
<div style="height: 10680px; line-height: 10680px; " class="spacer"> </div>
</div>
<div style="height: 100px; margin-left: 0px; position: relative; width: 770px; z-index: 15; " id="footer_layer">
<div style="height: 0px; line-height: 0px; " class="bumper"> </div>
<div id="id19" style="height: 27px; left: 634px; position: absolute; top: 27px; width: 102px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_102_27" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_4"><a class="class15" title="Docs-wolfssl-manual-A-ssl-tls-overview.html" href="Docs-wolfssl-manual-A-ssl-tls-overview.html">Next Chapter</a></p>
</div>
</div>
</div>
<div id="id20" style="height: 25px; left: 35px; position: absolute; top: 27px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_19"><a class="class16" title="Docs-wolfssl-manual-17-11-wolfssl-api-certificate-manager.html" href="Docs-wolfssl-manual-17-11-wolfssl-api-certificate-manager.html">Previous Chapter</a></p>
</div>
</div>
</div>
<div id="id21" style="height: 25px; left: 323px; position: absolute; top: 27px; width: 125px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_125_25" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_7"><a class="class17" title="Docs-wolfssl-manual-toc.html" href="Docs-wolfssl-manual-toc.html">Table of Contents</a></p>
</div>
</div>
</div>
<div id="id22" style="height: 29px; left: 35px; position: absolute; top: 65px; width: 701px; z-index: 1; " class="style_SkipStroke shape-with-text">
<div class="text-content graphic_textbox_layout_style_default_External_701_29" style="padding: 0px; ">
<div class="graphic_textbox_layout_style_default">
<p style="padding-bottom: 0pt; padding-top: 0pt; " class="paragraph_style_20">Copyright 2017 wolfSSL Inc.  All rights reserved.</p>
</div>
</div>
</div>
</div>
</div>
</div>
 </body>

<!-- Mirrored from www.wolfssl.com/wolfSSL/Docs-wolfssl-manual-17-13-wolfssl-api-tls-extensions.html by HTTrack Website Copier/3.x [XR&CO'2014], Tue, 17 Jan 2017 13:36:31 GMT -->
</html>
